package com.cspg.ssss.repository;

import com.cspg.ssss.domain.GradeDeptStatEntity;
import com.cspg.ssss.domain.ProblemInst;
import com.cspg.ssss.domain.ProblemInstCheckItemEntity;
import com.cspg.ssss.domain.StatusCountEntity;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface ProblemInstMapper {

    int insert(ProblemInst record);

    /**
     * 从打分问题源表中增量插入打分问题记录到实例表
     * @return
     */
    int insertFromSrc();

    /**
     * 查询打分问题实例表
     * @param condition key包含assessment_dept
     * @return
     */
    List<ProblemInst> selectProblemInstList(Map<String,Object> condition);

    List<ProblemInstCheckItemEntity> selectCheckItemWithProblem();

    int updateProblemInst(Map<String,Object> updateFiled);

    List<ProblemInst> selectFeedbackProblem(String department_path);

    /**
     * 根据条件查询打分问题列表
     * @param condition
     * @return
     */
    List<ProblemInst> selectProblemInstListWithCondition(Map<String,Object> condition);

    /**
     * 根据审核人选择待审核或复核的问题列表
     * @param condition
     * @return
     */
    List<ProblemInst> selectProblemInstListWithApproveUser(Map<String,Object> condition);

    /**
     * 统计问题数量
     * @param condition
     * @return
     */
    int selectProblemGradeNumStat(Map<String,Object> condition);

    /**
     * 统计不同状态的问题数量
     * @param condition
     * @return
     */
    List<StatusCountEntity> selectProblemStatusNumStat(Map<String,Object> condition);


    /**
     * 统计公司对单位，每个被考核单位打分情况
     * @param condition
     * @return
     */
    List<GradeDeptStatEntity> selectProblemStatusNumCompanyStat(Map<String,Object> condition);

    /**
     * 统计单位对部门，每个被考核部门打分情况
     * @param condition
     * @return
     */
    List<GradeDeptStatEntity> selectProblemStatusNumDeptStat(Map<String,Object> condition);

    /**
     * 统计公司对单位，每个科室打分情况
     * @param condition
     * @return
     */
    List<GradeDeptStatEntity> selectProblemGradeStatByGradeDept(Map<String,Object> condition);

    /**
     * 批量评分审核
     * @param condition
     */
    void batchApproveProblem(Map<String,Object> condition);

    /**
     * 打分审核时，统计各单位或者各部门被考核情况（被考核单位名称，待审核问题数，总扣分数）
     * @param condition
     * @return
     */
    List<GradeDeptStatEntity> selectApproveProblemStatusNumStat(Map<String,Object> condition);
}